package com.design.design.pattern.structural.proxy.selfPractice.jdkdynamic2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 该代理类就是类似 AOP 中的aspect
 * @author TomDragon
 */
public class JdkDynamicSubjectProxy implements InvocationHandler{
    /**
     * 动态代理也是需要目标对象的
     */
    private RealSubject target;

    public JdkDynamicSubjectProxy(RealSubject target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 增强逻辑
        System.out.println("before");
        // 通过反射调用目标方法 （如果必要添加try catch）
        Object invokeResult = method.invoke(target, args);
        // 增强逻辑
        System.out.println("after");
        return invokeResult;
    }
}
